///**
// * Copyright (c) 2016-2019 人人开源 All rights reserved.
// *
// * https://www.renren.io
// *
// * 版权所有，侵权必究！
// */
//
//package io.renren.modules.job.service.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import io.renren.common.utils.Constant;
//import io.renren.common.utils.PageUtils;
//import io.renren.common.utils.Query;
//import io.renren.modules.job.dao.ScheduleJobDao;
//import io.renren.modules.job.entity.ScheduleJobEntity;
//import io.renren.modules.job.service.ScheduleJobService;
////import io.renren.modules.job.utils.ScheduleUtils;
//import org.apache.commons.lang.StringUtils;
//import org.quartz.CronTrigger;
//import org.quartz.Scheduler;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.annotation.PostConstruct;
//import java.util.*;
//
//@Service("scheduleJobService")
//public class ScheduleJobServiceImpl extends ServiceImpl<ScheduleJobDao, ScheduleJobEntity> implements ScheduleJobService {
//	@Autowired
//    private Scheduler scheduler;
//
//	/**
//	 * 项目启动时，初始化定时器
//	 */
//	@PostConstruct
//	public void init(){
//		List<ScheduleJobEntity> scheduleJobList = this.list();
//		for(ScheduleJobEntity scheduleJob : scheduleJobList){
//			CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId());
//            //如果不存在，则创建
//            if(cronTrigger == null) {
//                ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
//            }else {
//                ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);
//            }
//		}
//	}
//
//	@Override
//	public PageUtils queryPage(Map<String, Object> params) {
//		String beanName = (String)params.get("beanName");
//
//		IPage<ScheduleJobEntity> page = this.page(
//			new Query<ScheduleJobEntity>().getPage(params),
//			new QueryWrapper <ScheduleJobEntity>().like(StringUtils.isNotBlank(beanName),"bean_name", beanName)
//		);
//
//		return new PageUtils(page);
//	}
//
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//	public void saveJob(ScheduleJobEntity scheduleJob) {
//		scheduleJob.setCreateTime(new Date());
//		scheduleJob.setStatus(Constant.ScheduleStatus.NORMAL.getValue());
//        this.save(scheduleJob);
//
//        ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
//    }
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//	public void update(ScheduleJobEntity scheduleJob) {
//        ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);
//
//        this.updateById(scheduleJob);
//    }
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//    public void deleteBatch(Long[] jobIds) {
//    	for(Long jobId : jobIds){
//    		ScheduleUtils.deleteScheduleJob(scheduler, jobId);
//    	}
//
//    	//删除数据
//    	this.removeByIds(Arrays.asList(jobIds));
//	}
//
//	@Override
//    public int updateBatch(Long[] jobIds, int status){
//    	Map<String, Object> map = new HashMap<>(2);
//    	map.put("list", Arrays.asList(jobIds));
//    	map.put("status", status);
//    	return baseMapper.updateBatch(map);
//    }
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//    public void run(Long[] jobIds) {
//    	for(Long jobId : jobIds){
//    		ScheduleUtils.run(scheduler, this.getById(jobId));
//    	}
//    }
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//    public void pause(Long[] jobIds) {
//        for(Long jobId : jobIds){
//    		ScheduleUtils.pauseJob(scheduler, jobId);
//    	}
//
//    	updateBatch(jobIds, Constant.ScheduleStatus.PAUSE.getValue());
//    }
//
//	@Override
//	@Transactional(rollbackFor = Exception.class)
//    public void resume(Long[] jobIds) {
//    	for(Long jobId : jobIds){
//    		ScheduleUtils.resumeJob(scheduler, jobId);
//    	}
//
//    	updateBatch(jobIds, Constant.ScheduleStatus.NORMAL.getValue());
//    }
//
//}
